pub fn has_todo(line: &str) -> bool {
    line.trim().contains("// todo:") && !line.contains("exclude-ai-todo")
}

pub fn contains_todo(content: &str) -> bool {
    for line in content.split('\n') {
        if has_todo(line) {
            return true;
        }
    }
    false
}

#[cfg(test)]
mod test_util {
    use super::*;
    #[test]
    fn test_has_todo() {
        let text = "  // todo: abcd ds"; // exclude-ai-todo
        assert_eq!(has_todo(text), true);

        let text1 = " let x = 3; // todo: refactor"; // exclude-ai-todo
        assert_eq!(has_todo(text1), true);

        let text2 = " let x = 3; //todo: refactor"; // exclude-ai-todo
        assert_eq!(has_todo(text2), false);

        let text3 = " let x = 3;";
        assert_eq!(has_todo(text3), false);

        let text4 = " let x = 3; // todo: abcd exclude-ai-todo"; // exclude-ai-todo
        assert_eq!(has_todo(text4), false);

        let text5 = r#"todo_content = line.trim().replace("// todo:", "").trim().to_string(); // exclude-ai-todo"#;
        assert_eq!(has_todo(text5), false);
    }

    #[test]
    fn test_contains_todo() {
        let content = r#"
        if has_todo(line) && has_todo_flag == false {
            todo_raw.push_str(line);
            todo_raw.push('\n');
            todo_content = line.trim().replace("// todo:", "").trim().to_string(); // exclude-ai-todo
            has_todo_flag = true;
            prev_comment_line_number = index as i32;
            "#;
        assert_eq!(contains_todo(content), false);
    }
}
